home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
061-070
/
amok66
/
menu
/
menutest.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
7KB
|
218 lines
(* ------------------------------------------------------------------------
:Program. MenuTest.
:Contents. Testprogram, öffnet Screen, Window und Menü.
:Author. Klaus Hlawaty.
:Address. Waldhof
:Address. 3579 Schrecksbach
:History. v1.0 - 23.Nov.91. ???
:Imports. Speed.
:Imports. Menu.
:Imports. xDisplay.
:Imports. xIntui.
:Imports. IntuiPointer.
:Copyright. PD
:Language. Oberon v2.13
:Translator. OBERON v2.13 / OLink v2.13d
------------------------------------------------------------------------ *)
MODULE MenuTest;
IMPORT
c:Conversions,
D:Display,
xD:xDisplay,
e:Exec,
i:Intuition,
xi:xIntui,
ip:IntuiPointer,
M:Menu,
ng:Requests,
NoGuruRq,
s:SYSTEM;
VAR
MyScreen : D.ScreenPtr;
MyWindow : M.WinMenuPtr;
class : LONGSET;
code : INTEGER;
iadr : s.ADDRESS;
Item : i.MenuItemPtr;
Kennung : INTEGER;
nMenu,
nItem,
nSubI : INTEGER;
Str : e.STRING;
Dummy : BOOLEAN;
BEGIN (* ------------------- Hauptprogramm --------------------- *)
NEW(MyScreen);
ng.Assert(MyScreen#NIL,"Screenspeicher nicht verfügbar");
NEW(MyWindow);
ng.Assert(MyWindow#NIL,"Windowspeicher nicht verfügbar");
MyScreen^.screen := NIL;
MyWindow^.window := NIL;
ng.Assert(D.OpenScreen(MyScreen,"TestScreen",
0,0,640,256,2,
TRUE,FALSE),
"Screen nicht geöffnet");
xD.WindowFlags := LONGSET{i.backDrop, i.borderless,
i.activate};
ng.Assert(M.OpenWinMenu(MyWindow,"TestWindo",
0,0,640,256,
MyScreen.screen),
"Window nicht geöffnet");
i.OldModifyIDCMP(MyWindow.window,LONGSET{i.menuPick});
ip.Busy(MyWindow.window);
(* ------------- Ende des Open Block ------------ *)
(* ---------------------------------------------------------------------- *)
(* ------------------- Aufbau des Menüs --------------------------------- *)
(* ---------------------------------------------------------------------- *)
M.AddMenu(MyWindow,"Menü X");
Item := M.AddItem(MyWindow
,"Ende"
,"Q"
,0011);
Item := M.AddSeparator(MyWindow);
Item := M.AddItem(MyWindow
,"Clear"
,"C"
,0012);
EXCL(Item.flags,i.highComp); (* Lösche nachträglich Invers *)
INCL(Item.flags,i.highBox); (* Setze nachträglich Umrandung *)
M.AddMenu(MyWindow,"Menü 2");
Item := M.AddItem(MyWindow
,"Item 21"
,"\o"
,0021);
Item := M.AddSubSeparator(MyWindow);
Item := M.AddTSubI(MyWindow
,"Item 211"
,"Y"
,0211
,TRUE);
Item := M.AddTSubI(MyWindow
,"Item 212"
,"X"
,0212
,FALSE);
M.MutualEx(MyWindow,211 , 212 , TRUE);
(* Item 211 & 212 schließen sich gegenseitig aus *)
Item := M.AddTSubI(MyWindow
,"Item 213"
,"Z"
,0213
,FALSE);
M.MutualEx(MyWindow,211 , 213 , TRUE);
(* Item 211 & 213 schließen sich gegenseitig aus *)
M.MutualEx(MyWindow,212 , 213 , TRUE);
(* Item 212 & 213 schließen sich gegenseitig aus *)
(* Alle Item's 211 .. 213 schließen sich gegenseitig aus *)
Item := M.AddSubSeparator(MyWindow);
Item := M.AddSeparator(MyWindow);
Item := M.AddItem(MyWindow
,"Item 22"
,"A"
,0022);
M.AddMenu(MyWindow,"Menü 3");
Item := M.AddItem(MyWindow
,"Item 31"
,"\o"
,0031);
Item := M.AddSeparator(MyWindow);
Item := M.AddTItem(MyWindow
,"Item 32"
,"\o"
,0032
,FALSE);
Item := M.AddSeparator(MyWindow);
Item := M.AddItem(MyWindow
,"Item 33"
,"\o"
,0033);
EXCL(Item.flags,i.itemEnabled);
(* Nachträgliche Änderung *)
(* Item nicht mehr wählbar *)
(* ======================= *)
M.FmtMenu(MyWindow); (* Formatiert das Menü *)
M.MenuON(MyWindow); (* Aktiviert das Menü *)
(* ---------------------------------------------------------------------- *)
(* ------------------- Abfrage des Menüs -------------------------------- *)
(* ---------------------------------------------------------------------- *)
ip.Busy(MyWindow.window);
ip.Normal(MyWindow.window);
D.ClrHome(MyWindow);
D.Position(MyWindow,0,2);
D.CursorOn(MyWindow);
REPEAT
ip.Normal(MyWindow.window);
Item := M.Wait(MyWindow,class,code,iadr);
WHILE(Item # NIL)DO
Kennung := Item(M.MItem).Kennung; (* Item : M.MItemPtr *)
(* Kennung wird - wegen Multiselect - erst hier geholt *)
ip.Busy(MyWindow.window); (* Mouse = ZZZ *)
(* ----------------------------- Textausgabe und Itemnummern *)
D.Write(MyWindow,"Intuition : MenuNr.");
xi.decodeMenu(code,nMenu,nItem,nSubI);
Dummy := c.IntToString(nMenu,Str,3);
D.Write(MyWindow,Str);
D.Write(MyWindow,"| ItemNr.");
Dummy := c.IntToString(nItem,Str,3);
D.Write(MyWindow,Str);
D.Write(MyWindow,"| SubItemNr.");
Dummy := c.IntToString(nSubI,Str,3);
D.Write(MyWindow,Str);
D.Write(MyWindow,"# Kennung:");
Dummy := c.IntToString(Kennung,Str,3);
D.Write(MyWindow,Str);
D.Write(MyWindow,". ");
(* -------------------- Bei Toggel-Item's Ausgabe von ON/OFF *)
IF(i.checkIt IN Item.flags)THEN
IF(i.checked IN Item.flags)THEN
D.Write(MyWindow," ON ");
IF(Kennung = 32)THEN
M.ItemON(MyWindow,33); (* Anschalten von Item 33 *)
END;
ELSE
D.Write(MyWindow," OFF");
IF(Kennung = 32)THEN
M.ItemOFF(MyWindow,33); (* Abschalten von Item 33 *)
END;
END (* IF checked *);
END (* IF checkit *);
D.WriteLn(MyWindow);
(* ----------------------------------------- Item 12 = Clear *)
IF(Kennung = 12)THEN
D.ClrHome(MyWindow);
D.Position(MyWindow,0,2);
D.CursorOn(MyWindow);
END;
(* ------------------------------ Hole nächstes Item bei MultiSelect *)
Item := M.ItemAdr(MyWindow,Item.nextSelect); (* Item : i.MenuItemPtr *)
END (* WHILE *);
IF(i.windowSizing IN class)THEN
D.Init(MyWindow);
END (* IF windowSizing *);
UNTIL(i.closeWindow IN class)OR(Kennung = 11); (* Item 11 = Ende *)
(* ------------- Begin des Endes ---------------- *)
CLOSE
ip.Normal(MyWindow.window);
IF(MyWindow^.window # NIL)THEN
M.MenuOFF(MyWindow);
M.Close(MyWindow);
END;
IF(MyScreen^.screen # NIL)THEN
M.Close(MyScreen);
END;
IF(MyScreen # NIL)THEN
DISPOSE(MyScreen);
END;
IF(MyWindow # NIL)THEN
DISPOSE(MyWindow);
END;
END MenuTest.